Építsünk IP telefont

 

 

Mérési útmutató

 

 

 

Kódolók

 

 

 

 

 

 

 

 

 

 

 

 

 

Készítette:

          Moldován István, moldovan@tmit.bme.hu

 

 

 

 

 

 

 

 


<!DOCTYPE HTML PUBLIC "+//ISBN 82-7640-037::WWW//DTD HTML//EN//2.0" "HTML.DTD" >

1.   Feladat:

 

A feladat során megvizsgáljuk a VoIP kódolók megvalósítását illetve használatát.

Első körben implementáljuk a G.711 u- vagy a-law kódolót, majd kipróbáljuk néhány „gyári” kódoló használatát is.

 

2.   Segédlet

Indítsuk el a Linux live – IP telefon disztribúciót. Ez már tartalmazza az alsa-lib könyvtárat is. Vegyük elő az előző órán elkészült ALSA mintaprogramot (minta program található a http://bodri.tmit.bme.hu/ip_telefon/docs/Lab/Codec/pcm.alap.c címen.

 

Teszteljük a program helyes működését, és ha szükséges állítsunk a grafikus mixeren (válasszuk ki a front mikrofont beviteli eszköznek, kapcsoljuk be a CAPTURE forrást és húzzuk fel az erősítést).

 

Szükség esetén a működés ellenőrizhető arecord  és aplay parancsok segítségével.

 

·         A G.711 implementációja

Az első feladat a program módosítása úgy, hogy lejátszás előtt kódolja el majd dekódolja a mintavételezett hangot.

 

   A G.711 (ITU-T, PCM: Pulse code modulation) egy nemzetközileg elismert standard és általánosan használt az analóg hang átalakítására és digitális hálózatokban való küldésére. A G.711 minősége és karakterisztikái gyakran referenciául szolgálnak új vagy javított kódolási algoritmusok összehasonlításakor a jelenlegi standardokkal. A jelenlegi PCM implementációk 64kbps átvitellel 4 KHz-es audio jelet eredményeznek. Két almodell létezik európai, illetve amerikai használatra, mégpedig a mu-law és a-law. Mindkettő egy megközelítőleg logaritmikus skálát alkalmaz a 16 bites minták 8 biten való tárolására. Így a hang dinamikáját jobban vissza tudja adni.

1 Ábra Az u-law kódolás

 

Definíció szerint a u-law kódolást a következő képlettel lehet elérni. Tipikusan 12..16 bites mintákat kódolunk, melyek csúcsértéke mp=2048 vagy 32768.

A u-LAW (ejtsd mu-LAW):

Ahol az m az aktuális minta értéke, u pedig 100 vagy 255. Egy más formája a fenti képletnek a:

 

           

ahol

        x = normalizált bemenet (-1 és 1 közti értékek)

        255 = kompressziós paraméter

        sgn(x) = sign (+/-) x előjele

Az így elért konverzió látható az alábbi ábrán.

2 Ábra A u-law kódoló karakterisztikája

Az a-law definíciója:

Ahol A=87.6, mp a minta csúcsértéke, m pedig az aktuális minta értéke. A képlet itt is egyszerűsödik ha m/mp értékét x normalizált egységgel helyettesítjük.

Az u-LAW -ból A-LAW –ba való konverzió veszteséges, mivel újabb kvantálási hibákat viszünk a rendszerbe. A u-law rendszert Észak-Amerikában és Japánban használják, míg az A-law van használatban Európában és nemzetközi viszonylatban.

A G.711 kódoló 0.125 ms algoritmikus késleltetést hoz be Packet Loss Concealment (PLC) csomagvesztésjavító algoritmus nélkül és 3.75 ms PLC algoritmussal. A kódoló gyakorlatilag bármilyen mintavételezési frekvenciával képes működni, de a szabvány 8 kHz-et mond. Számítási komplexitása minimális.

 

Az implementálását legyeszerűbben (és leghatékonyabban) egy előre kiszámított táblázat segítségével valósíthatjuk meg…

 

 

·         Más kódoló használata

GSM: http://www.quut.com/gsm/

A nyílt forráskód a honlapról letölthető. Integrációja egyszerű:  az include könyvtárban levő gsm.h az interfész a könyvtárhoz. Inicializáláskor létre kell hozni a kódoló és dekódoló állapot tárhelyeit (gsm_create függvénnyel, külön a kódolónak, külön a dekódolónak). Ezután gsm_encode/ gsm_decode függvényekkel lehet kódolni/dekódolni a hangot.

 

G.729, AMR-NB és AMR-WB kódolók:

http://www.voiceage.com/freecodecs.php

Használatuk megegyezik (vagy nagyon hasonlít) a GSM használatához, azonban a forrás híján a lib fájlt kell linkelni fordításkor.

 

3.   Tesztelés

Vizsgáljuk meg a hangminőség változását a különböző kódolók használata esetén!

 

4.   Irodalom

http://www.quut.com/gsm/

http://www.voiceage.com/freecodecs.php